#ifndef __WD_TCPHEADER_H__
#define __WD_TCPHEADER_H__

#include"func.h"
#define BUFSIZE 1000
//抽象出一个通道层
typedef struct Channel{
    int sockfd;
    int recvbufSize;//接收缓存区已经存放了多少数据
    char recvbuf[BUFSIZE];//接收缓存区
    int sendbufSize;//发送缓存区已经存放了多少数据
    char sendbuf[BUFSIZE];//发送缓存区
}channel_t;

int socketInit();//初始化套接字

void setNonblock(int fd);//将套接字设置为非阻塞

struct sockaddr_in inetaddress(const char*ip, uint16_t port);//绑定网络地址

int tcpServerInit(const char*ip, uint16_t port);//套接字服务的初始化

int sendn(int fd,const void* p,int len);
int recvn(int sfd, void *p, int len);

void channelIsInit(channel_t* p,int length);

//针对某一个通道的销毁
void channelInit(channel_t* p);
void channelDestory(channel_t* p);
void clearRecvbuf(channel_t* p);
void clearSendbuf(channel_t* p);

//通道内的增删查
void channelAdd(channel_t* p,int length,int fd);
void channelDel(channel_t* p,int length,int fd);

//>=0表示查到了某一个fd
//-1表示没查到
int channelGetIndex(channel_t* p,int length,int fd);

//epoll一系列操作
int epollCreat();
void epollAddReadWriteEvent(int epfd,int fd);
void epollAddReadEvent(int epfd,int fd);
void epollClearWriteEvent(int epfd,int fd);
void epollSetWriteEvent(int epfd,int fd);
void epollDelEvent(int epfd,int fd);

#endif
